package TCPMain;

import android.content.ComponentName;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import com.example.tcp2504.R;
import com.example.tcp2504.learnService;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

public class loginActivity extends AppCompatActivity {

    private EditText usernameEditText;
    private EditText passwordEditText;
    private Button serverBotton;
    private Button loginBotton;
    private ArrayList<String> serverList;
    boolean isBound=false;
    private TCPService tcpService;
    String TAG = "loginActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        // 初始化UI元素
        usernameEditText = findViewById(R.id.username);
        passwordEditText = findViewById(R.id.password);
        serverBotton = findViewById(R.id.server_button);
        loginBotton = findViewById(R.id.login_button);


        // 初始化服务器列表
        serverList = new ArrayList<>();
        serverList.add("+");

        // 从SharedPreferences加载保存的服务器地址
        loadSavedServers();
        findViewById(R.id.server_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showServerSelectionDialog();
            }
        });
        // 设置登录按钮点击事件
        findViewById(R.id.login_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String username = usernameEditText.getText().toString();
                String password = passwordEditText.getText().toString();
                // 检查服务器地址是否为空
                if (serverBotton.getText().toString().equals("+")){
                    showServerSelectionDialog();
                    return;
                }
                // 检查用户名和密码是否为空
                if (username.isEmpty() || password.isEmpty()) {
                    //Toast.makeText(loginActivity.this, "请输入用户名和密码", Toast.LENGTH_SHORT).show();
                    performLogin(usernameEditText.getText().toString(), passwordEditText.getText().toString(), serverBotton.getText().toString());
                }else{
                    // 处理登录逻辑
                    performLogin(usernameEditText.getText().toString(), passwordEditText.getText().toString(), serverBotton.getText().toString());
                }
            }
        });

        // 设置忘记密码文本点击事件
        findViewById(R.id.forgot_password).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 处理忘记密码逻辑
                Toast.makeText(loginActivity.this, "忘记密码功能未实现", Toast.LENGTH_SHORT).show();
            }
        });
    }

    /**
     * 显示服务器选择对话框
     */
    private void showServerSelectionDialog() {
        // 创建适配器
        ArrayAdapter<String> adapter = new ArrayAdapter<>(
                this,
                android.R.layout.select_dialog_singlechoice,
                serverList);

        // 显示选择对话框
        new AlertDialog.Builder(this)
                .setTitle("选择服务器")
                .setAdapter(adapter, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String selectedServer = serverList.get(which);
                        if (selectedServer.equals("+")) {
                            showAddServerDialog();
                        } else {
                            //设置按钮名字
                            serverBotton.setText(selectedServer);
                            }
                    }
                })
                .setNegativeButton("取消", null)
                .show();
    }

    /**
     * 显示添加服务器对话框
     */
    private void showAddServerDialog() {
        View dialogView = getLayoutInflater().inflate(R.layout.dialog_add_server, null);
        final EditText serverAddress = dialogView.findViewById(R.id.server_address);
        final EditText serverPort = dialogView.findViewById(R.id.server_port);

        new AlertDialog.Builder(this)
                .setTitle(R.string.add_server)
                .setView(dialogView)
                .setPositiveButton(R.string.add, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String address = serverAddress.getText().toString();
                        String port = serverPort.getText().toString();

                        if (!address.isEmpty()) {
                            addServerAddress(address, port);
                        } else {
                            Toast.makeText(loginActivity.this, "请输入有效的服务器地址", Toast.LENGTH_SHORT).show();
                        }
                    }
                })
                .setNegativeButton(R.string.cancel, null)
                .show();
    }

    /**
     * 添加服务器地址并保存
     */
    private void addServerAddress(String address, String port) {
        String server = address + ":" + port;
        if (!serverList.contains(server)) {
            serverList.add(server);
        }

        // 保存到SharedPreferences
        SharedPreferences prefs = getSharedPreferences("server_prefs", MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();

        Set<String> serverSet = new HashSet<>(serverList);
        editor.putStringSet("servers", serverSet);
        editor.apply();

        // 再次显示对话框以选择新添加的服务器
        showServerSelectionDialog();
    }

    /**
     * 从SharedPreferences加载保存的服务器地址
     */
    private void loadSavedServers() {
        SharedPreferences prefs = getSharedPreferences("server_prefs", MODE_PRIVATE);
        Set<String> savedServers = prefs.getStringSet("servers", null);

        if (savedServers != null) {
            serverList.clear();
            serverList.add("+"); // 保留添加按钮

            for (String server : savedServers) {
                if (!server.equals("+")) {
                    serverList.add(server);
                }
            }
        }
    }

    /**
     * 执行登录操作
     */
    private void performLogin(String username, String password, String server) {
        Toast.makeText(this,
                "正在使用服务器 " + server + " 登录，用户名：" + username,
                Toast.LENGTH_SHORT).show();
        Log.d(TAG, "正在使用服务器 " + server + " 登录，用户名：" + username);
        //实际的登录逻辑
        //初始化传输服务
//        Intent intent1 = new Intent(this, TCPService.class);
//        bindService(intent1, serviceConnection, BIND_AUTO_CREATE);
        //跳转显示页面
        Intent intent2 = new Intent(this, ShowDataActivity.class);
        intent2.putExtra("username", username);
        intent2.putExtra("password", password);
        intent2.putExtra("server", server);
        AllData.setUsername(username);
        AllData.setPassword(password);
        AllData.setSERVER_IP(server.split(":")[0]);
        AllData.setSERVER_PORT(Integer.parseInt(server.split(":")[1]));
        /**
         * FLAG_ACTIVITY_REORDER_TO_FRONT
         * 这个标志会将目标 Activity 移动到任务栈的顶部。如果目标 Activity 已经存在，则将其移到栈顶；如果不存在，则创建一个新的实例。
         * FLAG_ACTIVITY_SINGLE_TOP
         * 这个标志会检查目标 Activity 是否已经位于任务栈的顶部。如果已经存在且位于栈顶，则不会创建新的实例，而是重用现有的实例；如果不存在，则创建一个新的实例。
         */
        intent2.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        startActivity(intent2);
    }
    // 定义一个 ServiceConnection 实例，用于处理绑定和解绑
//    private ServiceConnection serviceConnection = new ServiceConnection() {
//        @Override
//        public void onServiceConnected(ComponentName className, IBinder service) {
//            TCPService.MyBinder binder = (TCPService.MyBinder) service;
//            TCPService tcpService = binder.getService();
//            isBound = true;
//            Log.d(TAG, "Service connected");
//        }

//        @Override
//        public void onServiceDisconnected(ComponentName arg0) {
//            isBound = false;
//            Log.d(TAG, "Service disconnected");
//        }
//    };
}